package com.xbongbong.saas.model;

import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.domain.entity.ext.PaasFormDataEntityExt;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.CostAdjustProductEntity;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author WuHB
 * @date 2021/11/22 08:58
 */
public interface CostAdjustProductModel extends IModel<CostAdjustProductEntity> {

    /**
     * 插入
     *
     * @param entity 实体
     * @return 是否成功
     * @throws XbbException 数据库操作异常
     */
    @Override
    Integer insert(CostAdjustProductEntity entity) throws XbbException;

    /**
     * 更新
     *
     * @param entity 实体
     * @return 是否成功
     * @throws XbbException 数据库操作异常
     */
    @Override
    Integer update(CostAdjustProductEntity entity) throws XbbException;

    /**
     * 获取符合查询条件的记录
     *
     * @param param 查询条件
     * @return 符合查询条件的记录
     */
    @Override
    List<CostAdjustProductEntity> findEntitys(Map<String, Object> param);

    /**
     * 获取符合查询条件的记录总数
     *
     * @param param 查询条件
     * @return 符合查询条件的记录总数
     */
    @Override
    Integer getEntitysCount(Map<String, Object> param);

    /**
     * Description: 查询符合条件的数据（无子表单数据）
     *
     * @param param 查询条件
     * @return java.util.List<T>
     */
    @Override
    List<CostAdjustProductEntity> findEntitysWithoutSub(Map<String, Object> param);

    /**
     * 批量插入
     *
     * @param productEntityList 产品集合
     */
    void insertBatch(List<CostAdjustProductEntity> productEntityList);

    /**
     * 解析
     *
     * @param productEntity 产品
     * @param warehouseList 仓库信息
     * @return 解析
     */
    JSONObject formatSingleProduct(CostAdjustProductEntity productEntity, List<PaasFormDataEntityExt> warehouseList) throws XbbException;

    /**
     * 根据成本调整单ID查询关联产品
     *
     * @param corpid       公司ID
     * @param costAdjustId 调整单ID
     * @param delIn        状态
     * @return
     */
    List<CostAdjustProductEntity> listByAdjustId(String corpid, Long costAdjustId, List<Integer> delIn);

    /**
     * 批量删除成本库单产品
     *
     * @param idList ID
     * @param corpid 公司ID
     * @param del    删除标记
     */
    Integer deleteBatchById(Collection<Long> idList, String corpid, Integer del);

    /**
     * 根据调整单ID删除成本调整单产品
     *
     * @param costAdjustId 成本调整单ID
     * @param corpid       公司ID
     */
    Integer deleteByCostAdjustId(Long costAdjustId, String corpid);

    void updateCostProductById(List<CostAdjustProductEntity> costAdjustProductEntityList, String corpid);

    /**
     * 获取成本调整单产品信息
     *
     * @param corpid       公司ID
     * @param adjustIdList 调整单ID
     */
    List<CostAdjustProductEntity> getProductsByAdjustIdIn(String corpid, List<Long> adjustIdList);

    /**
     * 批量跟新成本调整单产品信息
     *
     * @param costAdjustProductEntityList 成本调整单产品信息
     * @param corpid                      公司ID
     * @return 影响行数
     */
    Integer updateBatch(List<CostAdjustProductEntity> costAdjustProductEntityList, String corpid);

}
